var V= {
    "params":{
        "verify_uname":"用户名长度为6-20个字符，以字母开头，且只能由数字、字母和下划线组成",
        "verify_upass":"密码长度为8-20个字符，且必须同时包含数字和大小写字母",
        "verify_email":"忘记密码时需要使用此邮箱找回，建议使用QQ、网易、阿里或新浪邮箱"
    },
    /*
     * o，表单对象this，type 填写前提示=0，填写后提示=1，txt 提示文字
     */
    "form_tips":function(o,txt,type){
        if(!arguments[2]) var type=0;
        if(txt=='') type=0;
        var form_tips_span='form_tips';//自动生成提示层类名
        var a=$(o).parent().find('.'+form_tips_span);
        if(a.length==0){
            $(o).after('<span class="'+form_tips_span+'">'+txt+'</span>');
            a=$(o).parent().find('.'+form_tips_span);
        }else{
            a.html(txt).css({'color':'red'});
        }
        a.css({'display':'inline-block','font-size':'12px','height':'32px','line-height':'30px','padding-right':'10px','border-right':'1px solid #ddd','text-indent':'30px','margin':'0 10px','background':'url(/css/lib/images/tips.png) 0 -176px no-repeat'});
        if(type==0){
            a.css({'color':'green'});
            if(txt=='') a.css({'background':'url(/css/lib/images/tips.png) 10px -263px no-repeat','border':'0px'}).html('&nbsp;');
        }else{
            a.css({'color':'red','background':'url(/css/lib/images/tips.png) 10px -298px no-repeat','border':'0px'});
        }
    },
    // 判断长度
    "verify_length":function(str,min,max){
        if(!arguments[1]) var min=0;
        if(!arguments[2]) var max=100;
        if(str.length<min) return "长度不能少于 "+min+" 个字符("+str.length+")";
        if(str.length>max) return "长度不能多于 "+max+" 个字符("+str.length+")";
        return '';
    },
    
    // 判断用户名
    "verify_uname":function(str) {
        str=str.toLocaleLowerCase();
        var no_prefix=['temp_','zazyz_','sqzyz_','admin'];
        for(var i=0;i<no_prefix.length;i++){
            if(str.substr(0,no_prefix[i].length)==no_prefix[i]) return '用户名不能以敏感字符 '+no_prefix.join(',')+' 开头';
        }
        var re=/^[a-z][a-z_0-9]{5,19}$/i;
        if(!re.test(str)) return V.params.verify_uname;
        return '';
    },
    
    // 判断密码
    "verify_upass":function(str) {
//      if (str.length >= 8 && str.length <= 20) {
//          return '';
//      } else {
//          return V.params.verify_upass;
//      } 
        if(str.length<8 || str.length>20) return '密码长度为8-20个字符，且必须同时包含数字和大小字母';
        
        
        var score = 0;
        var re1=/[0-9]+/;if(re1.test(str)) score++;
        var re2=/[a-z]+/;if(re2.test(str)) score++;
        var re3=/[A-Z]+/;if(re3.test(str)) score++;
        //if(verify::verify_upass_single($str)) return '密码强度较弱，请重新设定密码';
        if(score<3) return '密码长度为8-20个字符，且必须同时包含数字和大小字母';
        
        var rpt=V.repeat_str(); //return implode(',',$rpt);
        for(var i=0;i<rpt.length;i++){
            if(str.indexOf(rpt[i])!=-1) return '密码不能包含4个及以上连续或重复的字母或数字'+str;
        }
        
        return '';
    },
    "repeat_str": function(){
        var arr_str='0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z';
        var arr=arr_str.split(',');
        var tmp=[];
        for(var i=0;i<arr.length;i++){
            //连续重复
            var tmp_str='';
            for(var j=0;j<4;j++){
                tmp_str=tmp_str+arr[i];
            }
            tmp.push(tmp_str);
            //连续顺序
            tmp_str='';
            for(j=0;j<4;j++){
                if(!arr[i+j]) continue;
                tmp_str=tmp_str+arr[i+j];
            }
            if(arr[i]=='7' || arr[i]=='8' || arr[i]=='9' || arr[i]=='x' || arr[i]=='y' || arr[i]=='z') continue;
            if(tmp_str.length==4)
                tmp.push(tmp_str);
        }
        return tmp;
    },
    // 判断电子邮箱
    "verify_email":function(str) {
        var re=/^[\w\-\.]+@[\w\-]+(\.\w+)+$/;
        if(!re.test(str)) return '电子邮箱格式不正确';
        return '';
    },
    
    // 判断中文姓名
    "verify_chinesename":function(str) {
        var re=/^[\u4e00-\u9fa5]+(·[\u4e00-\u9fa5]+)*$/;
        if(!re.test(str)) return '中文姓名格式不正确，请与证件上保持一致';
        return '';
    },
    
    // 判断URL
    "verify_url":function(str) {
        var re=/^http:\/\/[A-Za-z0-9]+\.[A-Za-z0-9]+[\/=\?%\-&_\~`@[\]\':+!]*([^<>\"])*$/i;
        if(re.test(str)){
            return '';
        }else{
            return '网址格式不正确，必须以 http:// 开头';
        }
    }, 
    // 判断手机号码
    "verify_mobile":function(str) {
        var re=/^((\(\d{3}\))|(\d{3}\-))?(13\d{9}|14\d{9}|15\d{9}|16\d{9}|17\d{9}|18\d{9}|19\d{9})$/i;
        if(re.test(str)){
            return '';
        }else{
            return '手机号码格式不正确';
        }
    }, 
    // 判断固定电话号码
    "verify_phone":function(str) {
        var re=/^(0[0-9]{2,3}\-)?([2-9][0-9]{6,7})+(\-[0-9]{1,4})?$/i;
        if(re.test(str)){
            return '';
        }else{
            return '固定电话号码格式不正确';
        }
    },
    
    // 判断性别和身份证号码是否相符，1=男，0=女
    "verify_idcard_gender":function(idcard,gender){
        if (idcard.substr(16,1) % 2 == gender){
            return '';
        }else{
            return '填写的性别和身份证号码上不符';
        }
    },
    
    // 判断生日和身份证号码是否相符，生日格式：XXXX-XX-XX
    "verify_idcard_birthday":function(idcard, birtyday) {
        var sBirthday = idcard.substr(6,4) + '-' + idcard.substr(10,2) + '-' . idcard.substr(12,2);
        if (sBirthday == birtyday) {
            return '';
        }else{
            return '出生日期和身份证号码上不符';
        }
    },
    "get_gender_birth":function(idcard){
        var ret={'gender':'','yy':'','mm':'','dd':''};
        ret.gender=idcard.substr(16,1) % 2;
        ret.yy=idcard.substr(6,4);
        ret.mm=idcard.substr(10,2);if(ret.mm.substr(0,1)=='0') ret.mm=ret.mm.substr(1);
        ret.dd=idcard.substr(12,2);if(ret.dd.substr(0,1)=='0') ret.dd=ret.dd.substr(1);
        return ret;
    },
    // 判断身份证号码，正确则返回18位后的身份证号码（兼容15位）
    "verify_idcard":function(idno,sex,bir) {
        if(!arguments[1]) var sex='';
        if(!arguments[2]) var bir='';
            var area = {
                11 : "北京",
                12 : "天津",
                13 : "河北",
                14 : "山西",
                15 : "内蒙古",
                21 : "辽宁",
                22 : "吉林",
                23 : "黑龙江",
                31 : "上海",
                32 : "江苏",
                33 : "浙江",
                34 : "安徽",
                35 : "福建",
                36 : "江西",
                37 : "山东",
                41 : "河南",
                42 : "湖北",
                43 : "湖南",
                44 : "广东",
                45 : "广西",
                46 : "海南",
                50 : "重庆",
                51 : "四川",
                52 : "贵州",
                53 : "云南",
                54 : "西藏",
                61 : "陕西",
                62 : "甘肃",
                63 : "青海",
                64 : "宁夏",
                65 : "新疆",
                71 : "台湾",
                81 : "香港",
                82 : "澳门",
                91 : "国外"
        }
        var idno, Y, JYM, S, M, idno_array;
        idno_array = idno.split("");
        if (idno.length != 15 && idno.length != 18) {
                return '身份证号的长度不正确';
        }
        if (area[parseInt(idno.substr(0, 2))] == null) {
                return '身份证地区非法!';//
        }
        var idno_sex = (idno.length == 15) ? idno_array[14] : idno_array[16];
        idno_sex %= 2;

        
        if (sex!='' && idno_sex != sex) {
            return '和您选中的性别不相符';
        }
        
        switch (idno.length) {
        case 15:
                return '请输入18位的身份证号，格式化后的身份证号码：'+V.idto18(idno);
                
                var dateStr = "19" + idno.substr(6, 2) + "-"
                                + idno.substr(8, 2) + "-" + idno.substr(10, 2);
                if (bir!='' && dateStr != bir) {// 判断是否和输入的生日是否一致
                        return '身份证号的生日和您输入的生日不相符';
                }
                
                if ((parseInt(idno.substr(6, 2)) + 1900) % 4 == 0
                                || ((parseInt(idno.substr(6, 2)) + 1900) % 100 == 0 && (parseInt(idno
                                                .substr(6, 2)) + 1900) % 4 == 0)) {
                        ereg = /^[1-9][0-9]{5}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}$/;// 测试出生日期的合法性
                } else {
                        ereg = /^[1-9][0-9]{5}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}$/;// 测试出生日期的合法性
                }
                if (ereg.test(idno)) {
                        return '';// 正确
                } else {
                        return '出生日期超出范围或含有非法字符';
                }
                break;
        case 18:
                
                var dateStr = idno.substr(6, 4) + "-" + idno.substr(10, 2)
                                + "-" + idno.substr(12, 2);
                if (bir!='' && dateStr != bir) {// 判断是否和输入的生日是否一致
                        return '身份证号的生日和您输入的生日不相符';
                }
                
                if (parseInt(idno.substr(6, 4)) % 4 == 0
                                || (parseInt(idno.substr(6, 4)) % 100 == 0 && parseInt(idno
                                                .substr(6, 4)) % 4 == 0)) {
                        ereg = /^[1-9][0-9]{5}(19|20)[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}[0-9Xx]$/;// 闰年出生日期的合法性正则表达式
                } else {
                        ereg = /^[1-9][0-9]{5}(19|20)[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}[0-9Xx]$/;// 平年出生日期的合法性正则表达式
                }
                if (ereg.test(idno)) {
                        S = (parseInt(idno_array[0]) + parseInt(idno_array[10])) * 7
                                        + (parseInt(idno_array[1]) + parseInt(idno_array[11]))
                                        * 9
                                        + (parseInt(idno_array[2]) + parseInt(idno_array[12]))
                                        * 10
                                        + (parseInt(idno_array[3]) + parseInt(idno_array[13]))
                                        * 5
                                        + (parseInt(idno_array[4]) + parseInt(idno_array[14]))
                                        * 8
                                        + (parseInt(idno_array[5]) + parseInt(idno_array[15]))
                                        * 4
                                        + (parseInt(idno_array[6]) + parseInt(idno_array[16]))
                                        * 2 + parseInt(idno_array[7]) * 1
                                        + parseInt(idno_array[8]) * 6 + parseInt(idno_array[9])
                                        * 3;
                        Y = S % 11;
                        JYM = "10X98765432";
                        M = JYM.substr(Y, 1);
                        if (M == idno_array[17].toUpperCase()) {
                                return '';// 正确
                        } else {
                                return '不是正确的身份证号码';
                        }
                } else {
                        return '出生日期超出范围或含有非法字符';
                }
                break;
        default:
                return '身份证号码错误，请确认';
                break;
        }
    },
    
    idto18:function(id){
        if(id.length==18) return id;
        var lastNumber;
        //取得前面17位号码
        var zone=id.substring(0,6);
        var year="19" + id.substring(6,8);
        var mdo=id.substring(8,15);
        id = zone + year + mdo;

        //取得最后的检验码
        var getNum=eval(id.charAt(0)*7+id.charAt(1)*9+id.charAt(2)*10+id.charAt(3)*5+id.charAt(4)*8+id.charAt(5)*4+id.charAt(6)*2+id.charAt(7)*1+id.charAt(8)*6+id.charAt(9)*3+id.charAt(10)*7+id.charAt(11)*9+id.charAt(12)*10+id.charAt(13)*5+id.charAt(14)*8+id.charAt(15)*4+id.charAt(16)*2);
        getNum=getNum%11;
        switch (getNum) {
        case 0 :
          lastNumber="1";
          break;
        case 1 :
          lastNumber="0";
          break;
        case 2 :
          lastNumber="X";
          break;
        case 3 :
          lastNumber="9";
          break;
        case 4 :
          lastNumber="8";
          break;
        case 5 :
          lastNumber="7";
          break;
        case 6 :
          lastNumber="6";
          break;
        case 7 :
          lastNumber="5";
          break;
        case 8 :
          lastNumber="4";
          break;
        case 9 :
          lastNumber="3";
          break;
        case 10 :
          lastNumber="2";
          break;
        }

        //document.write(lastNumber);
        all = id + lastNumber;
        return all;
}
    
    
} 